Modern businesses above a certain size almost always use one or more types of enterprise software to advance their business objective and fulfill their business needs.
In the 1960's, large and medium size companies began to adopt data processing to help manage their operations. For the most part these companies acquired a medium to large size IBM mainframe, placed it in the basement and hired programmers to write applications specific to their business.
In the 1970's, Frank Dodge, John Cullinane, and others built software companies that made general-purpose business software (A/R, A/P, Payroll, Inventory, etc.) which they sold to a large range of businesses. Because this new generation of software replaced the purpose-built generation of software, it had to be highly customized for each customer, and customers expected the software to bend to their business process, not the other way around.
In the 1980's, 1990's, and 2000's this software category evolved into Enterprise Resource Planning (ERP) and grew to encompass accounting, manufacturing, supply chain, human resources and other business functions. As the scope of these packages, especially those from SAP, grew, customers spent more-and-more to customize them to their needs.
Until recently, a key characteristic of enterprise software, including ERP, was its location; companies have normally run enterprise software on their own equipment. That is, each installation serves one customer. Customization does not impact other customers, because no other customer uses the specific customized instance of the software.
Many examples of enterprise software are fundamentally directed to managing data and relationships that correspond to real-world business entities such as customers, products and shipments.
For example, enterprise software may be used to provide services such as automated billing, security, enterprise content management, IT service management, customer relationship management, enterprise resource planning, business intelligence, project management, collaboration, human resource management, manufacturing, enterprise application integration, enterprise forms automation, and the like.
Many businesses share similar needs for broadly categorized services such as those listed above. However, no two businesses are exactly identical. Consequently, almost all enterprise software allows a degree of configuration and customization. For example, various examples of enterprise software might include support for a customer-specific chart-of-accounts, customer-specific report formats, customer-specific processing logic, customer-specific workflows, and/or customer-specific logos and color schemes.
However, adapting enterprise software to fit the processes of a company is often performed by an expensive consultant and may include lengthy processes such as some or all of the following.                Needs assessment        Planning and architecture design        Database design        Bi-directional data movement from and to other applications and data sources        Workflow modeling        Interface design and programming        Programming to implement business rules        
Moreover, in many cases, customization is fragile. As vendors release new versions, customers or their vendors must merge the customizations from the previous version into the new version. As well, when business processes evolve, companies must change the software to match.
Until relatively recently, enterprise software installations were per-customer: each customer had its own copy. As a result, the customizations of a given customer only impacted one instance of the software.
More recently, software-as-a-service (“SaaS”) providers have offered multiple tenants access to shared instances of enterprise software running in the so-called “cloud”. SaaS enterprise software vendors include Salesforce.com of San Francisco, Calif.; Concur Technologies of Bellevue, Wash.; and the like.
In a “multi-tenant” architecture, multiple customers or “tenants” share a single instance of an enterprise software application, but each tenant typically has its own configuration data. Or more properly, each tenant has its own configuration meta data, which serve to describe to the application the tenant's customizations of the application.
For example, Salesforce.com (“SFDC”) allows a tenant to customize its applications in various ways, including by adding new entities to or deleting entities from the tenant's database; adding, deleting, and/or modifying fields within a database entity; adding, deleting, and/or modifying validation rules; adding, deleting, and/or modifying user permissions; and the like.
In some cases, a third-party may provide services that integrate with a tenant's customized enterprise software instance. For example, one such third-party integrator is Nuiku, Inc. of Redmond, Wash., which provides natural-language “virtual assistant” services that integrate with enterprise software back-ends such as SFDC.
In order to answer an end-user's questions such as “how many interactions have I had with Mary Smith relating to Zirlow promotions?”, the Nuiku services must take into account any customizations that the tenant and/or the end-user have made to their SFDC instance.
However, SFDC and similar SaaS enterprise-software providers do not necessarily make a complete set of all such tenant customization meta data available to third parties that wish to integrate with a tenant's customized enterprise software instance.
Consequently, each tenant that wishes to use a third-party's integrated services would traditionally employ a consultant to customize the third-party services to match the tenant's customized enterprise software instance. However, such manual customizations tend to be expensive, fragile, and hard to scale, requiring frequent or periodic manual intervention to maintain.